// 快速傅里叶变换 FFT算法 高精度乘法
// 测试链接 ：https://www.luogu.com.cn/problem/P1919
// 相关帖子 ：https://www.cnblogs.com/dx123/p/17015967.html
// 相关帖子 ：https://en.oi-wiki.org/math/poly/fft/
// 提交以下的code，可以直接通过

#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int MAXN = 3e6;
const double PI = acos(-1);
struct complex
{
    double x, y; // 实部，虚部
    // 复数加法
    complex operator+(const complex& t) const
    {
        return {x + t.x, y + t.y};
    }
    // 复数减法
    complex operator-(const complex& t) const
    {
        return {x - t.x, y - t.y};
    }
    // 复数乘法
    complex operator*(const complex& t) const
    {
        return {x * t.x - y * t.y, x * t.y + y * t.x};
    }
}A[MAXN], B[MAXN];
char s1[MAXN], s2[MAXN];
int ans[MAXN];

void FFT(complex A[], int n, int op)
{
    if(n == 1) return;
    complex A1[n / 2], A2[n / 2];
    for(int i = 0; i < n / 2; ++i)
    {
        A1[i] = A[i * 2];
        A2[i] = A[i * 2 + 1];
    }
    FFT(A1, n / 2, op); FFT(A2, n / 2, op);
    complex w1({cos(2 * PI / n), op * sin(2 * PI / n)});
    complex wk({1, 0});
    for(int i = 0; i < n / 2; ++i)
    {
        A[i] = A1[i] + A2[i] * wk;
        A[i + n / 2] = A1[i] - A2[i] * wk;
        wk = wk * w1;
    }
}

int main()
{
    scanf("%s%s", s1, s2);
    int n = strlen(s1) - 1, m = strlen(s2) - 1;
    for(int i = 0; i <= n; ++i) A[i].x = s1[n - i] - '0';
    for(int i = 0; i <= m; ++i) B[i].x = s2[m - i] - '0';
    for(m = n + m, n = 1; n <= m; n <<= 1);
    // 正变换 ：由系数求点值，n 个系数 -> (n + 1) 个点值（复平面上的坐标）
    FFT(A, n, 1); FFT(B, n, 1);
    for(int i = 0; i < n; ++i) A[i] = A[i] * B[i]; // 相乘后的多项式的点值
    // 逆变换 ：由点值求系数，(n + 1) 个点值（复平面上的坐标）-> n 个系数
    FFT(A, n, -1);
    int k = 0;
    // 高精度乘法
    for(int i = 0, t = 0; i < n || t; ++i)
    {
        t += A[i].x / n + 0.5;
        ans[k++] = t % 10;
        t /= 10;
    }
    while(k > 1 && !ans[k - 1]) --k;
    for(int i = k - 1; i >= 0; --i) printf("%d", ans[i]);

    return 0;
}